perm filename WIXSUB.FAI[VIS,HPM]6 blob
sn#147482 filedate 1975-02-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE WIXSUB
C00005 00003 PERUSE: 0
C00009 00004 VARIAN: 0
C00012 00005 CLN: 0
C00013 00006 HIPASS: 0 HI PASS FILTERING
C00016 00007 ***** SAIL INTERFACE ********
C00017 00008
C00021 00009 ARN1: 0
C00023 00010 CLEAN: MOVEM 12,ACS12
C00024 ENDMK
C⊗;
TITLE WIXSUB
ENTRY INTRST,BSTCOR,CLEAN,PASSHI
EXTERN MAKTAB,CORGET,CORREL
WIND: 0
HORWIN: 0
VERWIN: 0
NWIN: 0
WINSIZ: 0
STRIP: 0
MAPTAB: 0
STRIP2: 0
A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17
FOR I←-2000,-1,1 { I*I
}
SQRS: FOR I←0,2000,1 {I*I
}
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13
PICWID: 0 ↔ BICWID: 0
PICLIN: 0 ↔ BICLIN: 0
PICHIG: 0 ↔ BICHIG: 0
PICBIT: 0 ↔ BICBIT: 0
PICWIZ: 0 ↔ BICWIZ: 0
PICSIZ: 0 ↔ BICSIZ: 0
COLTAB: 0 ↔ BOLTAB: 0
ROWTAB: 0 ↔ BOWTAB: 0
SETUP: 0
MOVE T,PCWD(ARRY) ;SET "GLOBALS" FOR COMPATABILITY WITH
MOVEM T,PICSIZ ;OLD FORMAT
MOVE T,LNBYA(ARRY)
MOVEM T,PICWIZ
MOVE T,BYBI(ARRY)
MOVEM T,PICBIT
MOVE T,PCLN(ARRY)
MOVEM T,PICHIG
MOVE T,LNWD(ARRY)
MOVEM T,PICLIN
MOVE T,LNBY(ARRY)
MOVEM T,PICWID
MOVE T,BPTAB(ARRY)
MOVEM T,COLTAB
MOVEI T,LINTAB(ARRY)
MOVEM T,ROWTAB
MOVE ARRY,(T)
JRST @SETUP
SETUP2: 0
MOVE T,PCWD(ARRY2) ;SET SIMILAR VARIABLES FOR SECOND ARRAY
MOVEM T,BICSIZ
MOVE T,LNBYA(ARRY2)
MOVEM T,BICWIZ
MOVE T,BYBI(ARRY2)
MOVEM T,BICBIT
MOVE T,PCLN(ARRY2)
MOVEM T,BICHIG
MOVE T,LNWD(ARRY2)
MOVEM T,BICLIN
MOVE T,LNBY(ARRY2)
MOVEM T,BICWID
MOVE T,BPTAB(ARRY2)
MOVEM T,BOLTAB
MOVEI T,LINTAB(ARRY2)
MOVEM T,BOWTAB
MOVE ARRY2,(T)
JRST @SETUP2
PERUSE: 0
MOVN T,HORWIN
HRRM T,CV
HRRM T,CV+2
HRRM T,CW
HRRM T,CW+1
ADDI T,1
HRRM T,DV
HRRM T,DV+2
HRRM T,DW
HRRM T,DW+1
ADDI T,1
HRRM T,EV
HRRM T,EV+2
HRRM T,EW
HRRM T,EW+1
MOVN STRP,PICWIZ
IMUL STRP,WIND
SUB STRP,PICWIZ
HRLZ STRP,STRP
HRLZ PNT,PICBIT
LSH PNT,6
ADDI PNT,-1(ARRY)
THIS←←2
SIZ←←3
MOVEM THIS,STRIP ;TEPORARILY SAVE STRP AND ARRYO,
MOVEM SIZ,STRIP2 ;BECAUSE THESE ARE THE "THIS" AND
MOVE SIZ,WIND ;"SIZ" ACS FOR CORGET
ADDI SIZ,1
IMUL SIZ,PICWIZ
PUSHJ 17,CORGET
HALT
HRRM THIS,PQ1
HRRM THIS,ILP
HRRM THIS,PQ2
HRRM THIS,PQ3
ADDI THIS,1
HRRM THIS,PR1
HRRM THIS,PR2
ADD THIS,PICWIZ
HRRM THIS,PP1
SUBI THIS,1
HRRM THIS,PP
HRRM THIS,PP0
MOVE THIS,STRIP
MOVE SIZ,STRIP2
SUBI ARRYO,1
MOVE VW,VERWIN
SETZ SUM,
VERLP: MOVE CNT,STRP
UNPAK: ILDB T,PNT
PQ1: MOVEM T,STRIP(CNT)
AOBJN CNT,UNPAK
MOVE CNT,HORWIN
SETZB POS,TOP
KLP: SETZB HC,VC
SETZB D1C,D2C
MOVE CNT2,WIND
JLP: MOVE CNT1,WIND
ILP: MOVE T,STRIP(POS)
PR1: SUB T,STRIP+1(POS)
ADD HC,SQRS(T)
PQ2: MOVE T,STRIP(POS)
PP: SUB T,STRIP+1(POS) ;REPLACED BY STRIP+<PICWID>(POS)
ADD VC,SQRS(T)
PQ3: MOVE T,STRIP(POS)
PP1: SUB T,STRIP+1(POS) ;REPLACED BY STRIP +<PICWID>+1
ADD D1C,SQRS(T)
PR2: MOVE T,STRIP+1(POS)
PP0: SUB T,STRIP+1(POS) ;REPLACED BY STRIP+<PICWID>
ADD D2C,SQRS(T)
ADD POS,PICWIZ
SOJG CNT1,ILP
AOS POS,TOP
SOJG CNT2,JLP
CAMLE HC,VC
MOVE HC,VC
CAMLE HC,D1C
MOVE HC,D1C
CAMLE HC,D2C
MOVE HC,D2C
ADD SUM,HC
TRZ HC,1 ;THE LOCAL MAXIMUM TEST
MOVEI T,1
CAMGE HC,(ARRYO)
AOJA HC,CW
ORM T,(ARRYO)
CV: CAMGE HC,HORWIN(ARRYO) ;R HALF BECOMES -<HORWIN>
AOJA HC,DW
ORM T,HORWIN(ARRYO) ;BECOMES -<HORWIN>(ARRYO)
DV: CAMGE HC,1+HORWIN(ARRYO) ;BECOMES 1-<HORWIN>
AOJA HC,EW
ORM T,1+HORWIN(ARRYO) ;1-<HORWIN>
EV: CAMGE HC,2+HORWIN(ARRYO) ;2-<HORWIN>
AOJA HC,LOOF
ORM T,2+HORWIN(ARRYO) ;2-<HORWIN>
JRST LOOF
CW: CAMLE HC,HORWIN(ARRYO) ;-<HORWIN>
ORM T,HORWIN(ARRYO) ;-<HORWIN>
DW: CAMLE HC,1+HORWIN(ARRYO) ;1-<HORWIN>
ORM T,1+HORWIN(ARRYO) ;1-<HORWIN>
EW: CAMLE HC,2+HORWIN(ARRYO) ;2-<HORWIN>
ORM T,2+HORWIN(ARRYO) ;2-<HORWIN>
LOOF: PUSH ARRYO,HC
SOJG CNT,KLP
SUB PNT,PICLIN
SOJG VW,VERLP
HRRZ THIS,PQ1
PUSHJ 17,CORREL
JRST @PERUSE
VARIAN: 0
SCANS: 0
MOVE T,ROWTAB ;SET UP ROWTAB,COLTAB ADDRESSES
HRRM T,LY1
MOVE T,COLTAB
SUBI T,1
HRRM T,SCT
MOVE T,BOWTAB ;SAME FOR ARRY2
HRRM T,LY2
MOVE T,BOLTAB
SUBI T,1
HRRM T,SCT2
MOVE T,STRIP ;SET UP STRIP AND STRIP2 ADDRS
HRRM T,STF1
HRRM T,STF2
MOVE T,STRIP2
HRRM T,S2F1
HRRM T,S2F2
SETZ TX,
SETZB SUM,SUMSQ
MOVE TY,Y1
LY1: MOVE PT,ROWTAB(TY) ;REPLACED BY ACTUAL ROWTAB
SCT: ADD PT,COLTAB-1(X1) ;SAME FOR COLTAB
HLL TX,X1
LX1: ILDB T,PT
ADD SUM,T
ADD SUMSQ,SQRS(T)
STF1: MOVEM T,STRIP(TX) ;REPLACE WITH REAL STRIP ADDR
AOBJN TX,LX1
AOBJN TY,LY1
IMUL SUM,SUM
IDIV SUM,DX1
IDIV SUM,DY1
SUB SUMSQ,SUM
MOVEM SUMSQ,VARIAN
MOVE TY,Y2
SETZ TX,
LY2: MOVE PT,BOWTAB(TY) ;REPLACED BY ACTUAL BOWTAB
SCT2: ADD PT,BOLTAB-1(X2) ;AND BOLTAB
HLL TX,X2
LX2: ILDB T,PT
S2F1: MOVEM T,STRIP2(TX) ;REPLACED WITH REAL STRIP2 ADDR
AOBJN TX,LX2
AOBJN TY,LY2
HLLZ X1,X1
HLLZ Y1,Y1
HLLZ X2,X2
HLLZ Y2,Y2
SUB X2,X1
SUB X2,[1,,0]
SUB Y2,Y1
SUB Y2,[1,,0]
MOVE DL,DX2
SUB DL,DX1
HRLZI SUM,377777
SETZ BESTY,
EXCH DX1,DX2 ;ANOTHER KLUDGE BECAUSE DX1 IS AC0
SETZ TXX,
SCY: HLL TXX,X2
SCX: SETZB TX,BESTX
S2F2: MOVEI T,STRIP2(TXX) ;REPLACE WITH REAL STRIP2
HRRM T,SCAX
MOVE TY,Y1
SCAY: HLL TX,X1
SCAX: MOVE T,STRIP2(TX) ;JUMPS FROM ONE ROW TO NEXT
STF2: SUB T,STRIP(TX) ;REPLACE WITH REAL STRIP
ADD BESTX,SQRS(T)
AOBJN TX,SCAX
ADDM DL,SCAX
AOBJN TY,SCAY
CAML BESTX,SUM
JRST .+3
BTST: MOVE SUM,BESTX
HRRZ BESTY,TXX
AOBJN TXX,SCX
ADDI TXX,-1(DX2)
AOBJN Y2,SCY
EXCH DX1,DX2 ;AND UNKLUDGE
IDIV BESTY,DX2
ASH SUM,4
IDIV SUM,VARIAN
JRST @SCANS
CLN: 0
MOVE CNT,PICWIZ
SUBI CNT,2
MOVE A,PICHIG
SUBI A,2
IMUL CNT,A
HRLZ PND,PICBIT
LSH PND,6
ADDI PND,-1(ARRY)
MOVE PNC,PND
ADD PNC,PICLIN
ILDB B,PNC
MOVE PNE,PNC
ADD PNE,PICLIN
ILDB A,PNC
MOVE PN1,PNC
ILDB CC,PNC
IBP PND
ILDB D,PND
ILDB E,PNE
WOOP: MOVE C,CC
CAMLE B,C
EXCH B,C
CAMLE D,E
EXCH D,E
CAMLE B,D
EXCH B,D
CAMLE C,E
EXCH C,E
CAMLE C,D
EXCH C,D
CAMLE A,D
DPB D,PN1
CAMGE A,C
DPB C,PN1
MOVE PN1,PNC
MOVE B,A
MOVE A,CC
ILDB CC,PNC
ILDB D,PND
ILDB E,PNE
SOJG CNT,WOOP
JRST @CLN
HIPASS: 0 ;HI PASS FILTERING
MOVE T,BOLTAB ;SET UP RIGHT INDEX TABLE REFERENCES
SUBI T,1
HRRM T,BOLF
MOVE T,BOWTAB
SUBI T,1
HRRM T,BOWF
MOVE T,MAPTAB
HRRM T,SMT1
HRRM T,SMT2
MOVE T,STRIP2
HRRM T,S2R1
HRRM T,S2R2
HRRM T,S2R3
HRRM T,S2R4
HRRM T,S2R5
SUBI T,1
HRRM T,CO
MOVEI E,1
ASH E,@PICBIT
MOVE C,E
ASH C,1
SUBI E,1
MOVE CNT,E
HRRM CNT,TABTS
HRRM CNT,TABTS+1
ASH CNT,-1
HRRM CNT,TABL
MOVN E,E
TABL: HRREI VW,100(E)
CAIGE VW,0
MOVEI VW,0
TABTS: CAILE VW,77
MOVEI VW,77
SMT1: MOVEM VW,MAPTAB(E)
ADDI E,1
SOJG C,TABL
BRK: HRL E,ARRY1
HRR E,ARRY2
MOVE C,ARRY2
ADD C,PICSIZ
SUBI C,1
BLT E,(C)
MOVN CNT,PICWIZ
HRLZ CNT,CNT
HRLZ PNT,PICBIT
LSH PNT,6
ADDI PNT,-1(ARRY)
MOVE PN1,PNT
MOVE B,CNT
CL: ILDB VW,PNT
S2R1: MOVEM VW,STRIP2(B)
AOBJN B,CL
MOVE E,WIND
SOJLE E,NADD
CN: MOVE B,CNT
CM: ILDB VW,PNT
S2R2: ADDM VW,STRIP2(B)
AOBJN B,CM
SOJG E,CN
NADD: MOVE DL,WIND
ASH DL,-1
BOLF: MOVE ARRY2,BOLTAB-1(DL) ;REPLACED BY REAL BOLTAB ADDRESS
BOWF: ADD ARRY2,BOWTAB-1(DL) ;DITTO FOR BOWTAB
MOVE C,WIND
SUB C,PICWIZ
HRLZ C,C
S2R3: MOVEI VW,STRIP2
ADD VW,WIND
HRRM VW,SUMST
MOVE E,PICHIG
SUB E,WIND
CR: SETZ SUM,
MOVE B,WIND
CO: ADD SUM,STRIP2-1(B)
SOJG B,CO
MOVE B,C
MOVE PND,PICLIN
ADDB PND,ARRY2
CP: MOVE CC,WINSIZ
IDIVM SUM,CC
ILDB DY1,PND
SHFST: SUB DY1,CC
SMT2: MOVE DY1,MAPTAB(DY1)
DPB DY1,PND
S2R4: SUB SUM,STRIP2(B)
SUMST: ADD SUM,STRIP2(B) ;CHANGED TO STRIP+<WIND>
AOBJN B,CP
MOVE B,CNT
CQ: ILDB CC,PN1
ILDB VW,PNT
SUB VW,CC
S2R5: ADDM VW,STRIP2(B)
AOBJN B,CQ
SOJGE E,CR
JRST @HIPASS
;***** SAIL INTERFACE ********
P←17
ACS12: 0
ACS16: 0
ACS17: 0
RETAD: 0
INTRST: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRYO
POP P,WIND
POP P,ARRY
JSR SETUP
MOVEM 17,ACS17
MOVE 1,PICWID
SUBI 1,1
IDIV 1,WIND
MOVEM 1,HORWIN
MOVE 1,PICHIG
SUBI 1,1
IDIV 1,WIND
MOVEM 1,VERWIN
IMUL 1,HORWIN
MOVEM 1,NWIN
MOVE 1,WIND
IMUL 1,1
MOVEM 1,WINSIZ
JSR PERUSE
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
IDIV SUM,NWIN
JRST @RETAD
DAX1: 0
DAY1: 0
DAX2: 0
DAY2: 0
D0X1: 0
D0Y1: 0
D0X2: 0
D0Y2: 0
DY2: 0
THIS←←2
SIZ←←3
ACS: BLOCK 20
XSIZR: 0
YSIZR: 0
BSTCOR: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,DAX2
POP P,DAY2
POP P,DAX1
POP P,DAY1
POP P,ARRY2
MOVE X1,@DAX1
MOVE Y1,@DAY1
MOVE X2,@DAX2
MOVE Y2,@DAY2
CAMLE X1,X2
EXCH X1,X2
CAMLE Y1,Y2
EXCH Y1,Y2
CAIGE X1,0
MOVEI X1,0
MOVE T,5(ARRY2) ;WIDTH
SUBI T,1
CAMLE X2,T
MOVE X2,T
CAIGE Y1,0
MOVEI Y1,0
MOVE T,0(ARRY2) ;HEIGHT
SUBI T,1
CAMLE Y2,T
MOVE Y2,T
MOVNM X1,XSIZR
ADDM X2,XSIZR
MOVNM Y1,YSIZR
ADDM Y2,YSIZR
MOVEM Y2,@DAY2
MOVEM X2,@DAX2
MOVEM Y1,@DAY1
MOVEM X1,@DAX1
JSR SETUP2
POP P,D0X2
POP P,D0Y2
POP P,D0X1
POP P,D0Y1
POP P,ARRY1
MOVE X1,@D0X1
MOVE Y1,@D0Y1
MOVE X2,@D0X2
MOVE Y2,@D0Y2
CAMLE X1,X2
EXCH X1,X2
CAMLE Y1,Y2
EXCH Y1,Y2
CAIGE X1,0
MOVEI X1,0
MOVE T,5(ARRY1) ;WIDTH
SUBI T,1
CAMLE X2,T
MOVE X2,T
CAIGE Y1,0
MOVEI Y1,0
MOVE T,0(ARRY1) ;HEIGHT
SUBI T,1
CAMLE Y2,T
MOVE Y2,T
MOVE T,X2
SUB T,X1 ;SHRINK THE SOURCE WINDOW
CAMG T,XSIZR ;UNTIL IT IS NO BIGGER THAN
JRST YSHRNK ;THE DESTINATION WINDOW
SUB T,XSIZR
ADDI T,1
ASH T,-1
ADD X1,T
SUB X2,T
YSHRNK: MOVE T,Y2
SUB T,Y1
CAMG T,YSIZR
JRST BEGCOR
SUB T,YSIZR
ADDI T,1
ASH T,-1
ADD Y1,T
SUB Y2,T
BEGCOR: MOVEM X1,@D0X1
MOVEM X2,@D0X2
MOVEM Y1,@D0Y1
MOVEM Y2,@D0Y2
EXCH Y2,Y1
EXCH X2,X1
JSR SETUP
SUBI Y1,-1(Y2) ;SET UP INNER LOOP COUNTERS
HRRE DY1,Y1
MOVN Y1,Y1
HRLZ Y1,Y1
HRR Y1,Y2
SUBI X1,-1(X2)
HRRE DX1,X1
MOVN X1,X1
HRLZ X1,X1
HRR X1,X2
MOVE Y2,@DAY2
MOVE T,@DAY1
SUBI Y2,-1(T)
HRREM Y2,DY2
MOVN Y2,Y2
HRLZ Y2,Y2
HRR Y2,T
MOVE X2,@DAX2
MOVE T,@DAX1
SUBI X2,-1(T)
HRRE DX2,X2
MOVN X2,X2
HRLZ X2,X2
HRR X2,T
MOVEM 16,ACS+16 ;SET UP UNPACKING AREAS
MOVEI 16,ACS
BLT 16,ACS+15
MOVE SIZ,DX1
IMUL SIZ,DY1
PUSHJ 17,CORGET
HALT
MOVEM THIS,STRIP
HRLZI 16,ACS
BLT 16,16
MOVE SIZ,DX2
IMUL SIZ,DY2
PUSHJ 17,CORGET
HALT
MOVEM THIS,STRIP2
HRLZI 16,ACS
BLT 16,16
MOVEM 17,ACS17
JSR SCANS
DIVTT: ADDB BESTX,@DAX1
ADD BESTX,DX1
SUBI BESTX,1
MOVEM BESTX,@DAX2
ADDB BESTY,@DAY1
ADD BESTY,DY1
SUBI BESTY,1
MOVEM BESTY,@DAY2
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
MOVE THIS,STRIP
PUSHJ 17,CORREL
MOVE THIS,STRIP2
PUSHJ 17,CORREL
JRST @RETAD
ARN1: 0
ARN2: 0
PASSHI: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRY2
POP P,WIND
POP P,ARRY1
HRL T,ARRY1
HRR T,ARRY2
BLT T,12(ARRY2)
MOVE T,ARRY2
SUB T,ARRY1
ADDM T,12(ARRY2)
MOVEM ARRY1,ARN1
MOVEM ARRY2,ARN2
PUSH P,ARRY2
PUSHJ P,MAKTAB
MOVE ARRY1,ARN1
MOVE ARRY2,ARN2
JSR SETUP
JSR SETUP2
MOVE 1,PICWID ;SET UP WINDOW PARAMETERS
SUBI 1,1
IDIV 1,WIND
MOVEM 1,HORWIN
MOVE 1,PICHIG
SUBI 1,1
IDIV 1,WIND
MOVEM 1,VERWIN
IMUL 1,HORWIN
MOVEM 1,NWIN
MOVE 1,WIND
IMUL 1,1
MOVEM 1,WINSIZ
MOVEM 16,ACS+16 ;SET UP UNPACKING AND MAP TABLE AREAS
MOVEI 16,ACS
BLT 16,ACS+15
MOVEI SIZ,1
ASH SIZ,@PICBIT
MOVEM SIZ,MAPTAB
ASH SIZ,1
PUSHJ 17,CORGET
HALT
MOVEM THIS,STRIP
ADDM THIS,MAPTAB
MOVE SIZ,PICWIZ
PUSHJ 17,CORGET
HALT
MOVEM THIS,STRIP2
HRLZI 16,ACS
BLT 16,16
MOVEM 17,ACS17
JSR HIPASS
MOVE 17,ACS17
MOVE 16,ACS16
MOVE 12,ACS12
MOVE THIS,STRIP
PUSHJ 17,CORREL
MOVE THIS,STRIP2
PUSHJ 17,CORREL
JRST @RETAD
CLEAN: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRY
JSR SETUP
MOVEM 17,ACS17
JSR CLN
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
JRST @RETAD
END